#include "Rayon.hpp"

#include "Formes/Hyperboloide.hpp"

using namespace std;

void calculeIntersection( const Forme* forme,
			  const Rayon& ray )
{
  cout << "*****************************************************************************" << endl;

  cout << "Rayon : origine " << ray.origine() << ", direction "
       << ray.direction() << endl << endl;

  Coord inter( forme -> trouveIntersection( ray ) );

  cout << inter << ", normale " << forme -> normale( inter ) << endl;
}

int main( int argc, char* argv[] )
{
  Coord centre( 0., 0., 0. );

  BaseHyperboloide testBHyper( centre,
			       Vecteur( 1., 0., 0. ),
			       Vecteur( 0., 1., 0. ),
			       Vecteur( 0., 0., 1. ),
			       3., 2., 1. );

  Coord origine( 10., 0., 0. );
  VecteurU direction( -1., 0., 0. );

  Rayon ray( origine, direction );

  calculeIntersection( &testBHyper, ray );

  origine = Coord( 0., -5., 0. );
  direction = VecteurU( 0., 1., 0. );

  ray = Rayon( origine, direction );

  calculeIntersection( &testBHyper, ray );

  origine = Coord( 0., 4., 1. );
  direction = VecteurU( 0., -1., 0. );

  ray = Rayon( origine, direction );

  calculeIntersection( &testBHyper, ray );

  origine = Coord( 0., 24., 2. );
  direction = VecteurU( 0., -1., 0. );

  ray = Rayon( origine, direction );

  calculeIntersection( &testBHyper, ray );

  origine = Coord( 0., 24., 10. );
  direction = VecteurU( 0., -1., 0. );

  ray = Rayon( origine, direction );

  calculeIntersection( &testBHyper, ray );

  cout << "####################" << endl
       << "####################" << endl
       << "Passage à Hyperboloïde !" << endl
       << "####################" << endl
       << "####################" << endl;

  Hyperboloide testHyper( centre,
			  Vecteur( 1., 0., 0. ),
			  Vecteur( 0., 1., 0. ),
			  Vecteur( 0., 0., 1. ),
			  3., 2., 1., 3., 2. );

  calculeIntersection( &testHyper, ray );

  origine = Coord( 0., 24., 2. );

  ray = Rayon( origine, direction );

  calculeIntersection( &testHyper, ray );

  origine = Coord( 0., 0., 10. );
  direction = VecteurU( 0., 0., -1. );

  ray = Rayon( origine, direction );

  calculeIntersection( &testHyper, ray );

  origine = Coord( 0., 0., -10. );
  direction = VecteurU( 0., 0., 1. );

  ray = Rayon( origine, direction );

  calculeIntersection( &testHyper, ray );

  return 0;
}
